import pandas as pd
from numpy.f2py.auxfuncs import throw_error

# 不同省份的大学数量
province_dict={
    '北京市':[2,94],
    '天津市':[94,150],
    '河北省':[150,281],
    '山西省':[281,363],
    '内蒙古自治区':[363,417],
    '辽宁省':[417,531],
    '吉林省':[531,599],
    '黑龙江省':[599,679],
    '上海市':[679,748],
    '江苏省':[748,923],
    '浙江省':[923,1034],
    '安徽省':[1034,1160],
    '福建省':[1160,1250],
    '江西省':[1250,1367],
    '山东省':[1367,1534],
    '河南省':[1534,1712],
    '湖北省':[1712,1846],
    '湖南省':[1846,1993],
    '广东省':[1993,2159],
    '广西省':[2159,2248],
    '海南省':[2248,2276],
    '重庆市':[2276,2351],
    '四川省':[2351,2492],
    '贵州省':[2492,2572],
    '云南省':[2572,2664],
    '西藏自治区':[2664,2672],
    '陕西省':[2672,2770],
    '甘肃省':[2770,2819],
    '青海省':[2819,2832],
    '宁夏回族自治区':[2832,2854],
    '新疆维吾尔自治区':[2854,2921],
}

def searcher(selected_education_level='所有', search_query='', selected_city='', selected_province=''):
    try:
        #使用pandas来读取CSV文件
        df = pd.read_csv("data.csv", encoding = "utf-8",header = None,skiprows=1)
        # 设置列名
        df.columns = ['id', 'name', 'code', 'department', 'city', 'education_level', 'remark']

        if selected_province != '' and selected_province not in province_dict.keys():
            throw_error("请输入正确的省份名称")

        if selected_province != '':
            # 筛选出指定省份的大学
            start_idx,end_idx = province_dict[selected_province][0],province_dict[selected_province][1]
            # 只在该省份范围内搜索
            df = df.iloc[start_idx:end_idx + 1]

        if selected_education_level != '所有':
            # 筛选出指定学历的大学
            df = df[df['education_level'] == selected_education_level]

        # 城市筛选
        if selected_city:
            df = df[df['city'] == selected_city]

        # 关键词搜索
        if search_query:
            # 支持多个关键词搜索
            if isinstance(search_query, str):
                keywords = search_query.split()
            else:
                keywords = search_query
            # 初始化筛选条件为全False（用于或逻辑）
            mask = pd.Series([False] * len(df), index=df.index)  # 添加 index=df.index
            # 在多个字段中搜索关键词
            for keyword in keywords:
                keyword_mask = (
                        df['id'].astype(str).str.contains(keyword, case=False, na=False) |
                        df['name'].str.contains(keyword, case=False, na=False) |
                        df['code'].astype(str).str.contains(keyword, case=False, na=False) |
                        df['department'].str.contains(keyword, case=False, na=False) |
                        df['city'].str.contains(keyword, case=False, na=False)
                )
                # 使用逻辑或操作累积匹配结果
                mask = mask | keyword_mask
            df = df[mask]

        return df.where(pd.notnull(df), None).to_dict('records')

    except Exception as e:
        print(f"搜索过程中发生错误: {e}")
        return []
